
#region Using Statements

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;

    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;

#endregion

namespace HumanElement.Xna.Construct
{
    /// <summary>
    /// [Public {Abstract}] Surface :: ISurface
    /// </summary>
    public abstract class Surface : ISurface
    {
		
        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="ISurface"/> is enabled.
        /// </summary>
        /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
        public bool Enabled
        {
            get;
            set;
        }

        /// <summary>
        /// Gets a value indicating whether this instance is loaded.
        /// </summary>
        /// <value><c>true</c> if this instance is loaded; otherwise, <c>false</c>.</value>
        public bool IsLoaded
        {
            get;
            private set;
        }

        /// <summary>
        /// Gets a value indicating whether this instance is visible.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is visible; otherwise, <c>false</c>.
        /// </value>
        public bool IsVisible
        {
            get;
            private set;
        }

        /// <summary>
        /// Gets or sets the last game time.
        /// </summary>
        /// <value>The last game time.</value>
        public GameTime LastGameTime
        {
            get;
            private set;
        }

        /// <summary>
        /// Gets or sets the manager.
        /// </summary>
        /// <value>The manager.</value>
        public ISurfaceManager Manager
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the name.
        /// </summary>
        /// <value>The name.</value>
        public string Name
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the pixel shader.
        /// </summary>
        /// <value>The pixel shader.</value>
        public PixelShader PixelShader
        {
            get;
            private set;
        }

        /// <summary>
        /// Gets the vertex shader.
        /// </summary>
        /// <value>The vertex shader.</value>
        public VertexShader VertexShader
        {
            get;
            private set;
        }
       

        /// <summary>
        /// Loads the content.
        /// </summary>
        /// <param name="content">The content.</param>
        /// <returns></returns>
        public abstract bool LoadContent(IContentManager content);

        /// <summary>
        /// Renders the specified device.
        /// </summary>
        /// <param name="device">The device.</param>
        /// <param name="viewport">The viewport.</param>
        public abstract void Render(GraphicsDevice device, IViewport viewport);

        /// <summary>
        /// Gets a value indicating whether this <see cref="IEntity"/> is paused.
        /// </summary>
        /// <value><c>true</c> if paused; otherwise, <c>false</c>.</value>
        public bool Paused
        {
            get { return Manager.GameHost.Paused; }
        }

        /// <summary>
        /// Updates the specified game time.
        /// </summary>
        /// <param name="gameTime">The game time.</param>
        public void Update(GameTime gameTime)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Initializes the specified game host.
        /// </summary>
        /// <param name="game">The game.</param>
        public virtual void Initialize(IGame game)
        {

        }
    }
}
